from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import render
from django.views.generic import View
from .models import *
from courses.models import *
from operation.models import *
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
from .forms import *

# Create your views here.

class OrgView(View):
    def get(self,request):
        all_orgs = CourseOrg.objects.all()
        all_cties = City.objects.all()
        hot_orgs = all_orgs.order_by('-click_nums')[:3]

        # 搜索机构过滤代码段
        search_keywords = request.GET.get('keywords', '')
        if search_keywords:
            all_orgs = all_orgs.filter(Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords))

        #取出筛选城市
        city_id = request.GET.get('city','')
        if city_id:
            all_orgs = all_orgs.filter(city_id=int(city_id))

        #类别筛选
        category = request.GET.get('category','')
        if category:
            all_orgs = all_orgs.filter(category=category)

        sort = request.GET.get('sort','')
        if sort:
            if sort == 'students':
                all_orgs = all_orgs.order_by('-students')
            elif sort == 'courses':
                all_orgs = all_orgs.order_by('-course_nums')


        #对机构进行分页（调用从github下载的模块pure-pagination功能）
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1
        p = Paginator(all_orgs, 4, request=request)
        orgs = p.page(page)
        org_nums = all_orgs.count()
        return render(request,'org-list.html',{
            'all_orgs':orgs,
            'all_cities':all_cties,
            'org_nums':org_nums,
            'city_id':city_id,
            'category':category,
            'hot_orgs':hot_orgs,
            'sort':sort,
        })

class AddUserAskView(View):
    def post(self,request):
        userask_form = UserAskForm(request.POST)
        if userask_form.is_valid():
            user_ask = userask_form.save(commit=True)
            return HttpResponse("{'status':'success'}",content_type='application/json')
        else:
            return HttpResponse("{'status':'fail','msg':'添加出错！'}",content_type='application/json')

#机构首页
class OrgHomeView(View):
    def get(self,request,org_id):
        current_page = 'home'
        course_org = CourseOrg.objects.get(id=int(org_id))
        course_org.click_nums +=1
        course_org.save()
        #判断收藏
        has_fav = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user,fav_id=course_org.id,fav_type=2):
                has_fav = True
        all_courses = course_org.course_set.all()
        all_teachers = course_org.teacher_set.all()
        return render(request,'org-detail-homepage.html',{
            'all_courses':all_courses,
            'all_teachers':all_teachers,
            'course_org':course_org,
            'current_page': current_page,
            'has_fav':has_fav,
        })

#机构课程列表页
class OrgCourseView(View):
    def get(self,request,org_id):
        current_page = 'course'
        course_org = CourseOrg.objects.get(id=int(org_id))
        has_fav = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user,fav_id=course_org.id,fav_type=2):
                has_fav = True
        all_courses = course_org.course_set.all()
        return render(request,'org-detail-course.html',{
            'all_courses':all_courses,
            'course_org':course_org,
            'current_page': current_page,
            'has_fav':has_fav,
        })

#机构介绍页
class OrgDescView(View):
    def get(self,request,org_id):
        current_page = 'desc'
        course_org = CourseOrg.objects.get(id=int(org_id))
        has_fav = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user,fav_id=course_org.id,fav_type=2):
                has_fav = True
        return render(request,'org-detail-desc.html',{
            'course_org':course_org,
            'current_page': current_page,
            'has_fav':has_fav,
        })

#机构教师列表页
class OrgTeacherView(View):
    def get(self,request,org_id):
        current_page = 'teacher'
        course_org = CourseOrg.objects.get(id=int(org_id))
        all_teachers = course_org.teacher_set.all()
        has_fav = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user,fav_id=course_org.id,fav_type=2):
                has_fav = True
        return render(request,'org-detail-teachers.html',{
            'course_org':course_org,
            'all_teachers': all_teachers,
            'current_page': current_page,
            'has_fav':has_fav,
        })

class AddFavView(View):
    def post(self,request):
        fav_id = request.POST.get('fav_id','0')
        fav_type = request.POST.get('fav_type','0')
        #判断用户登录状态
        if not request.user.is_authenticated():
            return HttpResponse("{'status':'fail','msg':'用户未登录！'}", content_type='application/json')
        exist_records = UserFavorite.objects.filter(user=request.user,fav_id=int(fav_id),fav_type=int(fav_type))
        if exist_records:
            #如果记录已存在，表示用户取消收藏
            exist_records.delete()
            if int(fav_type) == 1:
                course = Course.objects.get(id=int(fav_id))
                course.favor_nums -=1
                if course.favor_nums < 0:
                    course.favor_nums =0
                course.save()
            elif int(fav_id)==2:
                course_org = CourseOrg.objects.get(id=int(fav_id))
                course_org.fav_nums -=1
                if course_org.favor_nums < 0:
                    course_org.favor_nums =0
                course_org.save()
            elif int(fav_id)==3:
                teacher = Teacher.objects.get(id=int(fav_id))
                teacher.fav_nums-=1
                if teacher.favor_nums < 0:
                    teacher.favor_nums =0
                teacher.save()
            return HttpResponse("{'status':'success','msg':'收藏'}", content_type='application/json')
        else:
            user_fav = UserFavorite()
            if int(fav_id)>0 and int(fav_type)>0:
                user_fav.user = request.user
                user_fav.fav_id = int(fav_id)
                user_fav.fav_type = int(fav_type)
                user_fav.save()

                if int(fav_type) == 1:
                    course = Course.objects.get(id=int(fav_id))
                    course.favor_nums +=1
                    course.save()
                elif int(fav_id) == 2:
                    course_org = CourseOrg.objects.get(id=int(fav_id))
                    course_org.fav_nums +=1
                    course_org.save()
                elif int(fav_id) == 3:
                    teacher = Teacher.objects.get(id=int(fav_id))
                    teacher.fav_nums +=1
                    teacher.save()

                return HttpResponse("{'status':'success','msg':'已收藏'}", content_type='application/json')
            else:
                return HttpResponse("{'status':'fail','msg':'收藏出错！'}", content_type='application/json')


class TeacherListView(View):
    def get(self, request):
        all_teachers = Teacher.objects.all()

        # 搜索教师过滤代码段
        search_keywords = request.GET.get('keywords', '')
        if search_keywords:
            all_teachers = all_teachers.filter(Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords))

        sort = request.GET.get('sort', '')
        if sort:
            if sort == 'hot':
                all_teachers = all_teachers.order_by('-click_nums')

        sorted_teacher = Teacher.objects.all().order_by('-click_nums')[:3]

        # 对讲师进行分页（调用从github下载的模块pure-pagination功能）
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1
        p = Paginator(all_teachers, 4, request=request)
        teachers = p.page(page)

        teachers_nums = all_teachers.count()
        return render(request,'teachers-list.html',{
            'all_teachers':teachers,
            'sorted_teacher':sorted_teacher,
            'sort':sort,
            'teachers_nums':teachers_nums,
        })

class TeacherDetailView(View):
    def get(self,request,teacher_id):
        teacher = Teacher.objects.get(id=int(teacher_id))
        teacher.click_nums +=1
        teacher.save()
        all_courses = Course.objects.filter(teacher=teacher)

        has_teacher_faved = False
        if UserFavorite.objects.filter(user=request.user,fav_type=3,fav_id=teacher.id):
            has_teacher_faved = True

        has_org_faved = False
        if UserFavorite.objects.filter(user=request.user, fav_type=2, fav_id=teacher.org.id):
            has_org_faved = True

        #讲师排行
        sorted_teacher = Teacher.objects.all().order_by('-click_nums')[:3]

        return render(request,'teacher-detail.html',{
            'teacher':teacher,
            'all_courses':all_courses,
            'sorted_teacher':sorted_teacher,
            'has_teacher_faved':has_teacher_faved,
            'has_org_faved':has_org_faved,
        })